//package com.boot.util;
//
//
//import com.boot.entity.User;
//import org.apache.commons.codec.DecoderException;
//import org.apache.commons.codec.binary.Base64;
//import org.apache.commons.codec.binary.Hex;
//import org.apache.commons.lang3.StringEscapeUtils;
//
//import javax.xml.bind.DatatypeConverter;
//import java.io.UnsupportedEncodingException;
//import java.net.URLDecoder;
//import java.net.URLEncoder;
//import java.security.GeneralSecurityException;
//import java.security.MessageDigest;
//import java.security.NoSuchAlgorithmException;
//import java.security.SecureRandom;
//
//public class Encodes {
//
//    private static final String DEFAULT_URL_ENCODING = "UTF-8";
//    private static final char[] BASE62 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".toCharArray();
//
//    private static SecureRandom random = new SecureRandom();
//    public static final String SHA1 = "SHA-1";
//
//    /**
//     * Hex编码.
//     */
//    public static String encodeHex(byte[] input) {
//        return new String(Hex.encodeHex(input));
//    }
//
//    /**
//     * Hex解码.
//     */
//    public static byte[] decodeHex(String input) {
//        try {
//            return Hex.decodeHex(input.toCharArray());
//        } catch (DecoderException e) {
//            throw new RuntimeException(e);
//        }
//    }
//
//    /**
//     * Base64编码.
//     */
//    public static String encodeBase64(byte[] input) {
//        return new String(Base64.encodeBase64(input));
//    }
//
//    /**
//     * Base64编码.
//     */
//    public static String encodeBase64(String input) {
//        try {
//            return new String(Base64.encodeBase64(input.getBytes(DEFAULT_URL_ENCODING)));
//        } catch (UnsupportedEncodingException e) {
//            return "";
//        }
//    }
//
//    /**
//     * Base64解码.
//     */
//    public static byte[] decodeBase64(String input) {
//        return Base64.decodeBase64(input.getBytes());
//    }
//
//    /**
//     * Base64解码.
//     */
//    public static String decodeBase64String(String input) {
//        try {
//            return new String(Base64.decodeBase64(input.getBytes()), DEFAULT_URL_ENCODING);
//        } catch (UnsupportedEncodingException e) {
//            return "";
//        }
//    }
//
//    /**
//     * Base62编码。
//     */
//    public static String encodeBase62(byte[] input) {
//        char[] chars = new char[input.length];
//        for (int i = 0; i < input.length; i++) {
//            chars[i] = BASE62[((input[i] & 0xFF) % BASE62.length)];
//        }
//        return new String(chars);
//    }
//
//    /**
//     * Html 转码.
//     */
//    public static String escapeHtml(String html) {
//        return StringEscapeUtils.escapeHtml4(html);
//    }
//
//    /**
//     * Html 解码.
//     */
//    public static String unescapeHtml(String htmlEscaped) {
//        return StringEscapeUtils.unescapeHtml4(htmlEscaped);
//    }
//
//    /**
//     * Xml 转码.
//     */
//    public static String escapeXml(String xml) {
//        return StringEscapeUtils.escapeXml10(xml);
//    }
//
//    /**
//     * Xml 解码.
//     */
//    public static String unescapeXml(String xmlEscaped) {
//        return StringEscapeUtils.unescapeXml(xmlEscaped);
//    }
//
//    /**
//     * URL 编码, Encode默认为UTF-8.
//     */
//    public static String urlEncode(String part) {
//        try {
//            return URLEncoder.encode(part, DEFAULT_URL_ENCODING);
//        } catch (UnsupportedEncodingException e) {
//            throw new RuntimeException(e);
//        }
//    }
//
//    /**
//     * URL 解码, Encode默认为UTF-8.
//     */
//    public static String urlDecode(String part) {
//
//        try {
//            return URLDecoder.decode(part, DEFAULT_URL_ENCODING);
//        } catch (UnsupportedEncodingException e) {
//            throw new RuntimeException(e);
//        }
//    }
//
//    public static void entryptPassword(User user) {
//        byte[] salt = new byte[Constants.SALT_SIZE];
//        random.nextBytes(salt);
////        user.setSalt(encodeHex(salt));
//        byte[] hashPassword = sha1(user.getPassword().getBytes(), SHA1, salt, Constants.HASH_INTERATIONS);
//        user.setPassword(encodeHex(hashPassword));
//    }
//
//    public static byte[] sha1(byte[] input, String algorithm, byte[] salt, int iterations) throws RuntimeException {
//        try {
//            MessageDigest digest = MessageDigest.getInstance(algorithm);
//
//            if (salt != null) {
//                digest.update(salt);
//            }
//
//            byte[] result = digest.digest(input);
//
//            for (int i = 1; i < iterations; i++) {
//                digest.reset();
//                result = digest.digest(result);
//            }
//            return result;
//        } catch (GeneralSecurityException e) {
//            throw new RuntimeException(e);
//        }
//    }
//
//    public static byte[] sha1(byte[] data) throws NoSuchAlgorithmException {
//        MessageDigest mDigest = MessageDigest.getInstance("sha1");
//        return mDigest.digest(data);
//    }
//
//    public static String urlSafeBase64Encode(byte[] data) {
//        String encodedString = DatatypeConverter.printBase64Binary(data);
//        encodedString = encodedString.replace('+', '-').replace('/', '_');
//        return encodedString;
//    }
//
//}
